//
// Created by shkstart on 2023/8/31.
// 测试：野指针

#include <stdio.h>


int *test(){
    int a = 10;  //局部变量
    return &a;  //返回变量a的地址
}

int main(){

    //情况1： 指针使用前未初始化
//    int *p1;
//
//    printf("%d\n",*p1); //错误的
//
//    *p1 = 10; //错误的

    //情况2：指针越界访问
//    int arr1[10] = {0};
//    //复习：之前讲过访问数组元素时的角标越界问题
////    for(int i = 0;i <= 10;i++){
////        arr1[i] = i;
////    }
//    int *p = arr1; //将arr[0]的地址赋给指针变量p
//    for(int i = 0;i <= 10;i++,p++){
//        *p = i;
//        printf("%d ",*p);
//    }
//
//    //当i = 10时，针对于*p = i的操作就是非法的，是野指针的行为。

    //情况3：指针指向已释放的空间
//    int *p2 = test();
//    printf("%d\n",*p2);

    //因为p2指向了一个可能被回收掉的内存地址。进而是一个野指针。

    return 0;
}

